In [1]:
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
from maux import *

Kvadratické funkcie

Kvadratická funkcia je určená rovnicou

y=ax2+bx+c,
kde a0,b,c sú reálne čísla. Definičným oborom je množina reálnych čísel. Grafom je parabola.

V nasledujúcich príkladoch budeme kresliť grafy a vyšetrovať priebeh kvadratických funkcií.

Úvodný príklad

Nakreslenie grafu kvadratickej funkcie danej rovnicou

y=x2.

In [2]:
#####
##### nakreslenie grafu funkcie
#####

#### vstupné údaje
def f(X): return X ** 2 # ufunc verzia funkcie
X = np.linspace(-3, 3, 6*10+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
Y = f(X) # odpovedajúce hodnoty závislej premennej

#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 9) # veľkosť obrázka (východzia hodnota je 6x4)

### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Graf funkcie $y = x^2$") # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
#ax.grid() # pravoúhla sieť
ax.set_yticks(range(0, 9+1)) # kótovanie y-ovej osi

## graf funkcie
ax.plot(X, Y)

### archivácia obrázka
#plt.savefig("<meno súboru>.png")

### samotné zobrazenie
plt.show()
plt.close('all')

Pokračovanie predchadzajúceho príkladu

Vyšetrenie priebehu kvadratickej funkcie danej rovnicou

y=x2.
Tu nás zaujímajú tieto informácie:

  • Nájdenie intervalov, na ktorých je funkcia monotónna.
  • Nájdenie extrémov funkcie.
In [3]:
#####
##### vyšetrenie priebehu funkcie
#####

#### vstupné údaje
def f(X): return X ** 2 # ufunc verzia funkcie
X = np.linspace(-3, 3, 6*10+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu

#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 9) # veľkosť obrázka (východzia hodnota je 6x4)

### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava 
ax.set_title(r"Priebeh funkcie $y = x^2$") # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
ax.grid() # pravoúhla sieť
ax.set_yticks(range(0, 9+1)) # kótovanie y-ovej osi

## monotónnosť funkcie
X1 = X[X <= 0] # interval, na ktorom je funkcia klesajúca
ax.plot(X1, f(X1), label="klesajúca")
X2 = X[X >= 0] # interval, na ktorom je funkcia rastúca
ax.plot(X2, f(X2), label="rastúca")

## extrémy funkcie
ax.plot(0, f(0), 'o', label="ostré minimum")

## legenda
#ax.legend()
ax.legend(loc='center') # umiestenie v strede diagramu

### archivácia obrázka
#plt.savefig("<meno súboru>.png")

### samotné zobrazenie
plt.show()
plt.close('all')

Trochu zložitejší príklad

Nakreslenie grafu a vyšetrenie priebehu kvadratickej funkcie danej rovnicou

y=x2x1.
Tu nás zaujímajú tieto informácie:

  • Nájdenie intervalov, na ktorých je funkcia monotónna.
  • Nájdenie extrémov funkcie.
  • Nulové body funkcie.

Riešenie je rozdelené do dvoch častí: v prvej časti je nakreslený graf funkcie, v druhej je vyšetrený priebeh funkcie.

Návod. Výraz na pravej strane definičnej rovnice upravíme najprv na štvorec

x2x1=x22x2+1454=(x12)254.
To nám umožní zapísať definičnú rovnicu vo vrcholovom tvare
y=(x12)254.
Grafom funkcie je tak parabola osovo súmerná s priamkou x=12. Vrchol paraboly, ktorý je minimom funkcie, je v bode [12,54]. Nulové body funkcie vypočítame takto
0=x2x1(x12)2=54|x12|=52x=12±52=1±52.
Číslo 1+52 sa nazýva zlatý rez:

In [4]:
#####
##### nakreslenie grafu funkcie
#####

#### vstupné údaje
def f(X): return X ** 2 - X - 1 # ufunc verzia funkcie
X = np.linspace(-2, 3, 5*10+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
Y = f(X) # odpovedajúce hodnoty závislej premennej

#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 11) # veľkosť obrázka (východzia hodnota je 6x4)

### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Graf funkcie $y = x^2-x-1$") # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
#ax.grid() # pravoúhla sieť

## graf funkcie
ax.plot(X, Y)

### archivácia obrázka
#plt.savefig("<meno súboru>.png")

### samotné zobrazenie
plt.show()
plt.close('all')
In [5]:
#####
##### vyšetrenie priebehu funkcie
#####

#### vstupné údaje
def f(X): return X ** 2 - X - 1 # ufunc verzia funkcie
X = np.linspace(-2, 3, 5*10+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu

#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 11) # veľkosť obrázka (východzia hodnota je 6x4)

### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Priebeh funkcie $y = x^2-x-1$") # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
ax.grid() # pravoúhla sieť

## monotónnosť funkcie
X1 = X[X <= 1/2] # interval, na ktorom je funkcia klesajúca
ax.plot(X1, f(X1), label="klesajúca")
X2 = X[X >= 1/2] # interval, na ktorom je funkcia rastúca
ax.plot(X2, f(X2), label="rastúca")

## extrémy funkcie
ax.plot(1/2, f(1/2), 'o', label="ostré minimum")
ax.annotate(r"$\left[\frac{1}{2},-\frac{5}{4}\right]$", xy=(1/2, -5/4), va='top', ha='center')

## nulové body funkcie
ax.plot([(1-np.sqrt(5))/2, (1+np.sqrt(5))/2], [0, 0], 'o', label="nulový bod")
ax.annotate(r"$\left[\frac{1-\sqrt{5}}{2},0\right]$", xy=((1-np.sqrt(5))/2, 0), va='bottom')
ax.annotate(r"$\left[\frac{1+\sqrt{5}}{2},0\right]$", xy=((1+np.sqrt(5))/2, 0), va='bottom', ha='right')

## legenda
ax.legend(loc='center')

### archivácia obrázka
#plt.savefig("<meno súboru>.png")

### samotné zobrazenie
plt.show()
plt.close('all')

Pokyny pre nasledujúce príklady

V nasledujúcich príkladoch budeme kresliť grafy a vyšetrovať priebeh vybraných kvadratických funkcií. Pretože tieto funkcie majú neohraničený definičný obor, budeme pri zostrojovaní grafu každej takejto funkcie vykreslovať len jej zaujímavú časť. Pri vyšetrovani priebehu týchto funkcií treba určiť:

  • intervaly, na ktorých je funkcia monotónna;
  • extrémy funkcie;
  • nulové body funkcie.

Súradnice význačných bodov, ktoré sú zrejmé z grafu, netreba explicitne uvádzať. Doporučujeme riešenie rozdeliť do dvoch častí:

  • V prvom obrázku nakreslite graf funkcie.
  • V druhom obrázku vyšetrite jej priebeh.
In [6]:
#####
##### šablóna riešenia (nakreslenie grafu a vyšetrenie priebehu funkcie)
#####

#### vstupné údaje
#def f(X): return None # ufunc verzia funkcie
#X = np.linspace(None, None, None+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
#Y = f(X) # odpovedajúce hodnoty závislej premennej

#### obrázok s jedným diagramom
#fig, ax = plt.subplots()
#fig.set_size_inches(6, 4) # veľkosť obrázka (východzia hodnota je 6x4)

### diagram
#init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
#ax.set_title("Graf funkcie $y = ax^2+bx+c$") # pomenovanie diagramu
#ax.set_title("Priebeh funkcie $y = ax^2+bx+c$") # pomenovanie diagramu
#ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
#ax.grid() # pravoúhla sieť

## graf funkcie
#ax.plot(X, Y)

## monotónnosť funkcie
#X1 = X[X <= None] # interval, na ktorom je funkcia monotónna
#ax.plot(X1, f(X1), label="monotónna")

## extrémy funkcie
#ax.plot(None, f(None), 'o', label="extrém")
#ax.annotate(r"[None,f(None)]", xy=(None, f(None)) # prípadná anotácia význačného bodu

## nulové body funkcie
#ax.plot(None, 0, 'o', label="nulový bod")
#ax.annotate(r"[None,0]", xy=(None, 0)) # prípadná anotácia význačného bodu

## legenda
#ax.legend()
#ax.legend(loc='center') # umiestenie v strede diagramu

### archivácia obrázka
#plt.savefig("<meno súboru>.png")

### samotné zobrazenie
#plt.show()
#plt.close('all')

Úloha

Nakreslite grafy a vyšetrite priebeh týchto funkcií

y=x2x2
y=x22+x+1

Úloha (3 body)

Nakreslite graf a vyšetrite priebeh funkcie danej rovnicou

y=x2+4x+2.

Úloha (3 body)

Nájdite kvadratickú funkciu, ktorej graf je parabola prechádzajúca bodmi [1,5], [0,4] a [1,1]. Overte graficky, či vaše riešenie je správne.

In [7]:
###
### šablóna riešenia
###

## zadanie
fig, ax = plt.subplots()
fig.set_size_inches(4, 10)
init_subplot(ax)
ax.set_aspect('equal')
ax.grid()
ax.set_yticks(range(-5, 5+1))

ax.plot([-1, 0, 1], [-5, -4, 1], 'o')

## riešenie
#def f(X): return None
#X = np.linspace(-3, 1.5, 9*10+1)
#Y = f(X)
#ax.plot(X, Y, label="riešenie")

## dokončenie
#ax.legend()
plt.show()
plt.close('all')

Poznámka

V nasledujúcich príkladoch si ukážeme, ako kresliť grafy parametrických systémov kvadratických funkcií. V niektorých z nich sa vykreslenie deje pomocou interaktívnych prvkov knižnice ipywidgets.

Dokumentácia:

V príkladoch si tiež aktívne precvičíme niektoré elementárne transformácie grafov funkcií.

Príklad

Nakreslenie grafov kvadratických funkcií

y=ax2
pre a=2,1,12,12,1,2 do jedného obrázka. Graf takejto funkcie vznikne z grafu funkcie y=x2

  • natiahnutím v smere osi y pre a>1,
  • stlačením v smere osi y pre 0<a<1,
  • preklopením okolo osi x pre a<0.

Pokyny. Nakreslite grafy pre iný výber parametrov.

In [8]:
#####
##### grafy parametrického systému funkcií
#####

#### vstupné údaje
def f(X, a): return a * X ** 2
X = np.linspace(-3, 3, 6*10+1)

#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 18)

### diagram
init_subplot(ax)
ax.set_title(r"Grafy funkcií $y = ax^2$")
ax.set_aspect('equal')
ax.grid()
ax.set_ylim(-9.5, 9.5)
ax.set_xticks(range(-3, 3+1))
ax.set_yticks(range(-9, 9+1))

## grafy funkcií
for a in [-2, -1, -1/2, 1/2, 1, 2]:
    ax.plot(X, f(X, a), label=r"$a = {}$".format(a))

## legenda
#ax.legend()
ax.legend(loc='upper center')

### archivácia obrázka
#plt.savefig("<meno súboru>.png")

### samotné zobrazenie
plt.show()
plt.close('all')

Pokračovanie predchadzajúceho príkladu

To isté ako v predchadzajúcom príklade, len vykreslenie sa deje pomocou interaktívnych prvkov knižnice ipywidgets.

In [9]:
#####
##### grafy parametrického systému funkcií (interaktívna verzia)
#####

#### vstupné údaje
def f(X, a): return a * X ** 2
X = np.linspace(-3, 3, 6*10+1)

#### obrázok s grafom funkcie y = ax²
def plot_graph(a):
    fig, ax = plt.subplots()
    fig.set_size_inches(6, 18)
    init_subplot(ax)
    ax.set_title(r"Graf funkcie $y = {0}{{x}}^2$".format(a))
    ax.grid()
    ax.set_ylim(-9.5, 9.5)
    ax.set_xticks(range(-3, 3+1))
    ax.set_yticks(range(-9, 9+1))
    ax.plot(X, f(X, a))
    plt.show()
    plt.close('all')

#### interaktívne vykreslenie obrázka
import ipywidgets as widgets
widgets.interact(plot_graph, 
                 a=widgets.SelectionSlider(options=[-2, -1, -1/2, 1/2, 1, 2], value=1)
                 #a=widgets.FloatSlider(min=-2, max=2, value=1, step=0.1) # iný výber parametrov
                 );

Úloha (3 body)

Do jedného obrázka nakreslite grafy kvadratických funkcií

y=(xh)2
pre h=2,1,0,1,2. Graf takejto funkcie vznikne z grafu funkcie y=x2 posunutím o h jednotiek pozdĺž osi x.

Návod. Nasledujúci obrázok obsahuje jedno z možných riešení. Iné riešenie by bolo pomocou interaktívnych prvkov knižnice ipywidgets.

Úloha

Do jedného obrázka nakreslite grafy kvadratických funkcií

y=x2+k
pre k=2,1,0,1,2. Graf takejto funkcie vznikne z grafu funkcie y=x2 posunutím o k jednotiek pozdĺž osi y.

Návod. Nasledujúci obrázok obsahuje jedno z možných riešení. Iné riešenie by bolo pomocou interaktívnych prvkov knižnice ipywidgets.

Interaktívny príklad

Nakreslenie grafu kvadratickej funkcie danej rovnicou vo vrcholovom tvare

y=a(xh)2+k
pre vybrané hodnoty parametrov a,h,k.

In [10]:
#####
##### grafy parametrického systému funkcií (interaktívna verzia)
#####

#### vstupné údaje
def f(X, a, h, k): return a * (X - h) ** 2 + k
X = np.linspace(-3, 3, 6*10+1)

#### obrázok s grafom funkcie y = a(x-h)²+k
def plot_graph(a, h, k):
    fig, ax = plt.subplots()
    fig.set_size_inches(6, 18)
    init_subplot(ax)
    ax.set_title(r"Graf funkcie $y = {0}({{x}}-{1})^2+{2}$".format(a, h, k))
    ax.set_aspect('equal')
    ax.grid()
    ax.set_ylim(-9.5, 9.5)
    ax.set_yticks(range(-9, 9+1))
    ax.plot(X, f(X, a, h, k))
    plt.show()
    plt.close('all')

#### interaktívne vykreslenie obrázka
import ipywidgets as widgets
widgets.interact(plot_graph,
                 a=widgets.FloatSlider(min=-2, max=2, value=1, step=0.1),
                 h=widgets.FloatSlider(min=-2, max=2, value=0, step=0.1),
                 k=widgets.FloatSlider(min=-2, max=2, value=0, step=0.1)
                );

Interaktívny príklad

Nakreslenie grafu kvadratickej funkcie danej rovnicou v štandardnom tvare

y=ax2+bx+c
pre vybrané hodnoty parametrov a,b,c.

In [11]:
#####
##### grafy parametrického systému funkcií (interaktívna verzia)
#####

#### vstupné údaje
def f(X, a, b, c): return a * X ** 2 + b * X + c
X = np.linspace(-3, 3, 6*10+1)

#### obrázok s grafom kvadratickej funkcie danej rovnicou y = ax²+bx+c
def plot_graph(a, b, c):
    fig, ax = plt.subplots()
    fig.set_size_inches(6, 18)
    init_subplot(ax)
    ax.set_title(r"Graf funkcie $y = {0}{{x}}^2+{1}{{x}}+{2}$".format(a, b, c))
    ax.set_aspect('equal')
    ax.grid()
    ax.set_ylim(-9.5, 9.5)
    ax.set_yticks(range(-9, 9+1))
    ax.plot(X, f(X, a, b, c))
    plt.show()
    plt.close('all')

#### interaktívne vykreslenie obrázka
import ipywidgets as widgets
from ipywidgets import Layout
widgets.interact(plot_graph, 
                 a=widgets.FloatSlider(min=-2, max=2, value=1, step=0.1),
                 b=widgets.FloatSlider(min=-2, max=2, value=0, step=0.1),
                 c=widgets.FloatSlider(min=-2, max=2, value=0, step=0.1)
                );